<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>Dart : Libraries : box2d : ContactListener</title>
</head>

<body>

<header></header>

<h1 id="title">interface <a name='ContactListener::ContactListener'>ContactListener</a></h1>

<section id="inheritance">

<section class="supertype">
<h2>Supertype:</h2>
<ul><li>Object</li></ul>
</section>

</section>

<section id="summary">

 Implement this interface to get contact information. You can use these
 results for things like sounds and game logic. You can also get contact
 results by traversing the contact lists after the time step. However, you
 might miss some contacts because continuous physics leads to sub-stepping.
 Additionally you may receive multiple callbacks for the same contact in a
 single time step.
 You should strive to make your callbacks efficient because there may be
 many callbacks per time step.

 warning: You cannot create/destroy Box2D entities inside these callbacks.

</section>

<section id="fields">
</section>

<section id="constructors">
</section>

<section id="methods">
<h2>Methods</h2>
<dl>
<dt>
<code>void <a name='ContactListener::beginContact'>beginContact</a>(<code><a href='Contact.html#Contact::Contact'>Contact</a></code> <a name='ContactListener::beginContact::contact'>contact</a>)</code></dt>
<dd>

 Called when two fixtures begin to touch.
</dd>
<dt>
<code>void <a name='ContactListener::endContact'>endContact</a>(<code><a href='Contact.html#Contact::Contact'>Contact</a></code> <a name='ContactListener::endContact::contact'>contact</a>)</code></dt>
<dd>

 Called when two fixtures cease to touch.
</dd>
<dt>
<code>void <a name='ContactListener::postSolve'>postSolve</a>(<code><a href='Contact.html#Contact::Contact'>Contact</a></code> <a name='ContactListener::postSolve::contact'>contact</a>, <code><a href='ContactImpulse.html#ContactImpulse::ContactImpulse'>ContactImpulse</a></code> <a name='ContactListener::postSolve::impulse'>impulse</a>)</code></dt>
<dd>

 This lets you inspect a contact after the solver is finished. This is
 useful for inspecting impulses.
 Note: the contact manifold does not include time of impact impulses,
 which can be arbitrarily large if the sub-step is small. Hence the impulse
 is provided explicitly in a separate data structure.
 Note: this is only called for contacts that are touching, solid, and awake.
</dd>
<dt>
<code>void <a name='ContactListener::preSolve'>preSolve</a>(<code><a href='Contact.html#Contact::Contact'>Contact</a></code> <a name='ContactListener::preSolve::contact'>contact</a>, <code><a href='Manifold.html#Manifold::Manifold'>Manifold</a></code> <a name='ContactListener::preSolve::oldManifold'>oldManifold</a>)</code></dt>
<dd>

 This is called after a contact is updated. This allows you to inspect a
 contact before it goes to the solver. If you are careful, you can modify 
 the contact manifold (e.g. disable contact).
 A copy of the old manifold is provided so that you can detect changes.
 Note: this is called only for awake bodies.
 Note: this is called even when the number of contact points is zero.
 Note: this is not called for sensors.
 Note: if you set the number of contact points to zero, you will not
 get an EndContact callback. However, you may get a BeginContact callback
 the next step.
 Note: the oldManifold parameter is pooled, so it will be the same object
 for every callback for each thread.
</dd>
</dl>
</section>

<footer></footer>

</body></html>
